AWS SDK for JavaScript(Version 3) と TypeScript を用いて S3 バケットの一覧を取得するサンプルコードを試してみた
こんにちは、アノテーションの及川です。
AWS SDK for JavaScript(Version 3)と TypeScript を用いて、自分が所有している S3 バケットの一覧を取得するサンプルコードを試していきたいと思います。
環境構築
Node.js のインストール
本検証ではローカルの PC(Mac) から行います。
検証には、Node.js の環境が必要になるため、まだインストールされていなければ、こちらから、インストールを行ってください。
% node -v v16.13.1 % npm -v 8.1.2
作業用ディレクトリの作成
プログラムを作成/実行する作業用ディレクトリを作成します。
コードエディターは Visual Studio Code を使用します。
そのため、作成した作業用ディレクトリに移動したら、下記のように code .コマンドを入力して、Visual Studio Code で作業用ディレクトリを開いてください。
% mkdir work % cd work % code .
code .コマンドを入力して、zsh: command not found: code と表示されたら、コマンドパレットを開いて、「シェル コマンド: PATH 内に 'code' コマンドをインストールします」をクリックします。
そうすると、code . のコマンドが実行できるかと思います。
下記ショートカットキーでも「コマンドパレット」を開くことができます。
Mac: Cmd + Shift + P
Windows: Ctrl + Shift + P
必要なパッケージのインストール
% npm init -y % npm i --save-dev @aws-sdk/client-s3 @aws-sdk/credential-providers @types/node typescript
package.json
- npm init -y により自動的に作成されます。
- インストールしたパッケージ名やバージョンの情報が記録(管理)されます。
{ "name": "work", "version": "1.0.0", "description": "", "main": "main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@aws-sdk/client-s3": "^3.150.0", "@aws-sdk/credential-providers": "^3.150.0", "@types/node": "^18.7.6", "typescript": "^4.7.4" } }
複数の TypeScript ファイルを tsc コマンドにて、JavaScript ファイルにコンパイルするための設定
% tsc --init
tsconfig.json
- tsc --init により、自動的に作成されます。
- ./src ディレクトリ配下のTypeScriptファイルをJavaScriptファイルにコンパイルして、./dist ディレクトリ配下に JavaScript ファイルを配置する等の設定をしています。
- 設定ファイルの詳細については、こちらをご参照ください。
{ "compilerOptions": { "target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, "module": "commonjs" /* Specify what module code is generated. */, "rootDir": "./src" /* Specify the root folder within your source files. */, "outDir": "./dist" /* Specify an output folder for all emitted files. */, "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, "strict": true /* Enable all strict type-checking options. */, "skipLibCheck": true /* Skip type checking all .d.ts files. */ } }
tsconfig.json を編集したら、src ディレクトリを作成します。
% mkdir src
プログラミング
Source Code
src ディレクトリ配下で、下記 2 つの TypeScript ファイル を作成します。
なお、下記ソースコードは AWS 公式ドキュメントのサンプルコード(List buckets)を使用して作成しています。
- s3Client.ts
// Create service client module using ES6 syntax. import { S3Client } from '@aws-sdk/client-s3'; import { fromIni } from '@aws-sdk/credential-providers'; const s3Client = new S3Client({ credentials: fromIni({ profile: '<Your Profile>' }), }); export { s3Client };
- main.ts
import { ListBucketsCommand } from '@aws-sdk/client-s3'; import { s3Client } from './s3Client'; // Helper function that creates an Amazon S3 service client module. export const run = async () => { try { const data = await s3Client.send(new ListBucketsCommand({})); console.log('Success', data.Buckets); return data; // For unit tests. } catch (err) { console.log('Error', err); } }; run();
s3Client.ts の Your Profile 部分には、JavaScript(TypeScript)プログラムから、AWS リソースにアクセスするための プロファイルを指定ください。
指定方法に関する内容はこちらになります。
【注意】
ACCESS_KEY_ID や YOUR_SECRET_ACCESS_KEY 等の credentials 情報が公開されるリスクを避けるため、これらの機密情報に関しては、ソースコードに直接記述(ハードコード)しないことをお勧めします。
詳細についてはこちらをご参照ください。
TypeScript ファイルのコンパイル
下記コマンドにより、main.ts と s3Client.ts に対する JavaScript ファイルが ./dist ディレクトリ配下に生成されます。
% tsc % ls ~/work/dist main.js s3Client.js
実行結果
main.js を実行することで、自分が所有している S3 バケットの一覧を取得することができました。
% node main.js Success [ { Name: 'test1', CreationDate: 2022-02-15T03:19:45.000Z }, { Name: 'test2', CreationDate: 2022-05-09T04:19:10.000Z }, { Name: 'test3', CreationDate: 2022-06-09T05:19:10.000Z } ]
まとめ
この記事が少しでも誰かのお役にたてば幸いです。
参考資料
- Loading credentials in Node.js from the shared credentials file - AWS SDK for JavaScript
-
Amazon S3 examples using SDK for JavaScript V3 - AWS SDK for JavaScript
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。